<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>26.继承对新增对象的影响</title>
</head>

<body>
</body>
<script>
  // 正确的继承原型的方法
  function User () { }
  User.prototype.name = function () {
    console.log('user.name');
  }

  // 构造函数定义完之后立刻new 出对象，如果 Admin.prototype是通过__proto__属性赋值的，因为一直是指向Animin.prototype对象的，所以立刻new 也是没问题的
  function Admin () { }
  let a = new Admin();
  Admin.prototype.role = function () {
    console.log('admin role');
  };
  a.role(); //admin role
  Admin.prototype.__proto__ = User.prototype; // 这个只是修改了Admin.prototype的父级原型，不是替换Admin.prototype本身


  function Member () { }
  // 使用Object.create(User.prototype);创建的对象是全新的，在修改Member.prototype之前实例化的对象原型还指向旧的Member.prototype对象，因此实例化后会报错Uncaught TypeError: m.role is not a function，旧有的原型没有增加role function而是添加在了新实例化的原型上
  let m = new Member();
  
  Member.prototype = Object.create(User.prototype);
  Member.prototype.role = function () {
    console.log('member role');
  };

  m.role();




</script>

</html>